package org.fastsyncer.common.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.lang.StringUtils;

/**
 * 日期转换工具类
 * @author YangPei
 */
public class DateUtil {

	private static SimpleDateFormat sdf_datetime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
	private static SimpleDateFormat sdf_date = new SimpleDateFormat("yyyy-MM-dd");
	
	/**
	 * 将Date对象转换为字符串日期
	 * @param date 格式：yyyy-MM-dd HH:mm:ss.SSS
	 * @return 字符串日期
	 */
	public static String parseDateTimeToStr(Date date) {
		String format = sdf_datetime.format(date);
		return StringUtils.isBlank(format) ? "" : format;
	}
	
	/**
	 * 将字符串日期转换为DateTime对象
	 * @param date 格式：yyyy-MM-dd HH:mm:ss.SSS
	 * @return Date
	 */
	public static Date parseStrToDateTime(String date) {
		try {
			return sdf_datetime.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 将字符串日期转换为Date对象
	 * @param date 格式：yyyy-MM-dd
	 * @return Date
	 */
	public static Date parseStrToDate(String date) {
		try {
			return sdf_date.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 计算时间差
	 * @param begin 开始日期
	 * @param end 结束日期
	 * @return 例如：10天1小时2分27秒
	 */
	public static String getDiff(Date begin, Date end) {
		long between = 0;
		try {
			between = (end.getTime() - begin.getTime());// 得到两者的毫秒数
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		long day = between / (24 * 60 * 60 * 1000);
		long hour = (between / (60 * 60 * 1000) - day * 24);
		long min = ((between / (60 * 1000)) - day * 24 * 60 - hour * 60);
		long s = (between / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
//		long ms = (between - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000 - s * 1000);
//		String result = day + "天" + hour + "小时" + min + "分" + s + "秒" + ms + "毫秒";
		return day + "天" + hour + "小时" + min + "分" + s + "秒";
	}
	
}
